<?php
// php_list_bg.jpg


$text       = trim($_GET['text']);
$txtcolor   = trim($_GET['txtcolor']);
$bgcolor    = trim($_GET['bgcolor']);
$width      = @(int)$_GET['width'];
$height     = @(int)$_GET['height'];

$bgcolor    = '#f8f1d7';


$font       = realpath(dirname(__FILE__) . '/微软雅黑.ttf');


$txtcolor   = ($txtcolor == '')?'#990000':$txtcolor;
$bgcolor    = ($bgcolor == '')?'#FFFFFF':$bgcolor;
$width      = ($width <=0 )?465:$width;
$height     = ($height <=0 )?36:$height;
$fontsize   = 20;
// 固定14个中文字符
$text_len   = utf8_substr($text);
if($text_len > 32) {
    // 大于28个字
    $x      = 0;
    $width  = ($fontsize+7) * ($text_len/2);
} else {
    // 小于28个字
    $x      = ($width - ($fontsize+7) * ($text_len/2))/2;
}



$angle      = 0;
$y          = 28;

/*
echo $text . '<br>';
echo $width . '---' . $fontsize  . '---' . ($text_len/2) . '=' . $x;
exit();
*/

$text   = iconv("GB2312", "UTF-8", $text);
$image  = imagecreate($width,$height);
imagefill($image, 0, 0, $bgcolor);





//$image = ImageCreateFromPng(dirname(__FILE__) . '/code/imgbg.png');


$bgcolor    = getcolor($bgcolor);
$txtcolor   = getcolor($txtcolor);



@imagettftext($image, 
        $fontsize, 
        $angle, 
        $x, 
        $y, 
        $txtcolor, 
        $font, 
        $text);
//header("Content-type: image/jpg");
header("Content-type: image/png");
@imagejpeg($image);
@imagedestroy($image);



function getcolor($color) {
     global $image;
     $color = eregi_replace ("^#","",$color);
     $r = $color[0].$color[1];
     $r = hexdec ($r);
     $b = $color[2].$color[3];
     $b = hexdec ($b);
     $g = $color[4].$color[5];
     $g = hexdec ($g);
     $color = imagecolorallocate ($image, $r, $b, $g); 
     return $color;
}
/**
 * @description
 *  截取字符串长度，一个中文字符为两个单位长度
 *  如果$start开始的字是大于160的，就回溯到直到最近出现小于160的字符或字符头的位置
 *  如果经过的字符是奇数，说明当前$start的位置为半个字符的位置
 *
 *  如果$len为奇数,实际截取字符串长度为$len+1
 *  如果$len为偶数,实际截取字符串长度为$len
 * @author
 *  hotgun@163.com
 *
 * @param
 *  $str    被截取字符串
 *  $len    截取长度
 *  $start  截取开始位置
 * @return
 *  (string)截取后的字符串
 */
function zh_substr($str, $len, $start=0) {
    // 判断$start的位置是否为半个字符的位置
    if($start!=0 && ord(substr($str,$start,1)) > 160) {
        for($i=$start; $i>0; $i--) {
            if(ord(substr($str,$i,1)) <= 160) break;
        }
        // 第$pos位为最近的双字节字符头
        $pos  = ($i == 0 && ord(substr($str,0,1)) > 160)?0:($i+1);
        // 之间相差为奇数则表示当前start为后半个字符位置，需要-1回到该字符的头
        if(($start-$pos)%2!=0) $start = $start - 1;
    }

    if($start == 0 && strlen($str) <= $len) {
        // 如果$start==0不需要用自定义函数进行长度判断，
        // 直接用php内置函数应该要块点
        return $str;
    } elseif(zh_strlen($str, $start) <= $len) {
        // 如果需要截取的字符串长度小于或等于目的字符串长度
        // 直接返回源字符串
        $str    = substr($str, $start, $len);
        return $str;
    }

    $strlen = $start + $len;
    $tmpstr = '';
    for($i = $start; $i < $strlen; $i++) {
        if(ord(substr($str,$i,1))>160) {
            $tmpstr .= substr($str,$i,2);
            $i++;
        } else {
            $tmpstr .= substr($str,$i,1);
        }
    }
    return $tmpstr;
}

/**
 * @description
 *  计算字符串长度，一个中文字符为两个单位长度
 * @author
 *  hotgun@163.com
 *
 * @param
 *  $str    被计算字符串
 * @return
 *  (int)字符串长度
 */
function zh_strlen($str, $start=0) {
   for ($i = $start,$zh = 0,$asc = 0; $i < strlen($str); $i++)
       (ord($str[$i]) > 160) ? $zh++ : $asc++;
   return $zh + $asc;
}
?>